<?php

/**
 * 用户关注分类.
 *
 * @author Jianmin Chen <sky_hold@163.com>
 * @copyright ©2003-2103 phpwind.com
 * @license http://www.phpwind.com
 *
 * @version $Id: PwAttentionType.php 19348 2012-10-13 03:52:48Z jinlong.panjl $
 */
class PwAttentionType
{
    public function getType($id)
    {
        if (empty($id)) {
            return array();
        }

        return $this->_getDao()->getType($id);
    }

    /**
     * 获取用户拥有的分类信息.
     *
     * @param int $uid
     *
     * @return array
     */
    public function getTypeByUid($uid)
    {
        return $this->_getDao()->getTypeByUid($uid);
    }

    /**
     * 添加一个分类.
     *
     * @param int    $uid
     * @param string $name
     *
     * @return bool|object
     */
    public function addType($uid, $name)
    {
        if (empty($name)) {
            return new PwError('USER:attention.type.name.empty');
        }
        if (Pw::strlen($name) > 10) {
            return new PwError('USER:attention.type.name.length.over');
        }

        return $this->_getDao()->addType(array(
            'uid' => $uid, 'name' => $name,
        ));
    }

    /**
     * 修改分类名称.
     *
     * @param int    $id
     * @param string $name
     *
     * @return bool|object
     */
    public function editType($id, $name)
    {
        if (empty($name)) {
            return new PwError('USER:attention.type.name.empty');
        }
        if (Pw::strlen($name) > 10) {
            return new PwError('USER:attention.type.name.length.over');
        }

        return $this->_getDao()->editType($id, array('name' => $name));
    }

    /**
     * 删除某个分类.
     *
     * @param int $id
     *
     * @return bool
     */
    public function deleteType($id)
    {
        if (empty($id) || $id < 0) {
            return false;
        }
        $this->_getDao()->deleteType($id);
        $this->deleteUserTypeByType($id);

        return true;
    }

    /*********** 以上是关注分组接口 **************\
     *********************************************
    \*********** 以下是用户分组接口 **************/

    /**
     * 获取用户所属的分组信息.
     *
     * @param int   $uid
     * @param array $toUids
     *
     * @return array
     */
    public function getUserType($uid, $touids)
    {
        if (empty($uid) || empty($touids) || !is_array($touids)) {
            return array();
        }

        return $this->_getRelationDao()->getTypeByUidAndTouids($uid, $touids);
    }

    public function countUserType($uid)
    {
        return $this->_getRelationDao()->count($uid);
    }

    /**
     * 获取用户(A)指定分类的关注用户.
     *
     * @param int $uid    用户(A)
     * @param int $typeid 分类id
     * @param int $limit
     * @param int $offset
     *
     * @return array
     */
    public function getUserByType($uid, $typeid, $limit = 20, $offset = 0)
    {
        if (empty($uid) || empty($typeid)) {
            return array();
        }

        return $this->_getRelationDao()->getUserByType($uid, $typeid, $limit, $offset);
    }

    /**
     * 保存用户多个分类.
     *
     * @param int $uid
     * @param int $touid
     * @param int $typeid
     *
     * @return bool
     */
    public function addUserType($uid, $touid, $typeid)
    {
        if (!$uid || !$touid) {
            return false;
        }

        return $this->_getRelationDao()->addUserType($uid, $touid, $typeid);
    }

    /**
     * 删除用户多个分类.
     *
     * @param int $uid
     * @param int $touid
     * @param int $typeids
     *
     * @return bool
     */
    public function deleteByUidAndTouidAndType($uid, $touid, $typeid)
    {
        if (!$uid || !$touid || !$typeid) {
            return false;
        }

        return $this->_getRelationDao()->deleteByUidAndTouidAndType($uid, $touid, $typeid);
    }

    /**
     * 保存用户分类.
     *
     * @param int   $uid
     * @param int   $touid
     * @param array $typeids
     *
     * @return bool
     */
    public function saveUserType($uid, $touid, $typeids)
    {
        if (!$uid || !$touid || !is_array($typeids)) {
            return false;
        }
        $this->deleteUserType($uid, $touid);
        if ($typeids) {
            return $this->_getRelationDao()->batchAdd($uid, $touid, $typeids);
        }

        return true;
    }

    /**
     * 删除用户的分类.
     *
     * @param int $uid
     * @param int $touid
     *
     * @return bool
     */
    public function deleteUserType($uid, $touid)
    {
        if (!$uid || !$touid) {
            return false;
        }

        return $this->_getRelationDao()->deleteByUidAndTouid($uid, $touid);
    }

    /**
     * 删除某个分组所有的用户关系.
     */
    public function deleteUserTypeByType($typeid)
    {
        if (empty($typeid)) {
            return false;
        }

        return $this->_getRelationDao()->deleteByType($typeid);
    }

    /**
     * @return PwAttentionTypeDao
     */
    protected function _getDao()
    {
        return Wekit::loadDao('attention.dao.PwAttentionTypeDao');
    }

    /**
     * @return PwAttentionRelationDao
     */
    protected function _getRelationDao()
    {
        return Wekit::loadDao('attention.dao.PwAttentionRelationDao');
    }
}
